package api

import (
	"gomain/app/model"
	"gomain/app/service"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

type CategoryApi struct{}

func (a *CategoryApi) List(r *ghttp.Request) {
	page := r.Get("page", 1).Int()
	limit := r.Get("limit", 10).Int()

	categories, count, err := service.Category.List(page, limit)
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code":  0,
		"msg":   "success",
		"data":  categories,
		"count": count,
	})
}

func (a *CategoryApi) Add(r *ghttp.Request) {
	var category model.Category
	if err := r.Parse(&category); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	if err := service.Category.Add(&category); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "success",
	})
}

func (a *CategoryApi) Update(r *ghttp.Request) {
	var category model.Category
	if err := r.Parse(&category); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	if err := service.Category.Update(&category); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "success",
	})
}

func (a *CategoryApi) Delete(r *ghttp.Request) {
	id := r.Get("id").Int()
	if id == 0 {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  "ID不能为空",
		})
		return
	}

	if err := service.Category.Delete(id); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "success",
	})
}
